package com.kty.methods.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 工具类：将不同的功能封装为方法
 */
public class Utils {

    /**
     * 数字 转换为 汉字
     */
    public static String shuToHan(int number) {

        String s = number + "";
        s = s.replace("1", "一");
        s = s.replace("2", "二");
        s = s.replace("3", "三");
        s = s.replace("4", "四");
        s = s.replace("5", "五");
        s = s.replace("6", "六");
        s = s.replace("7", "七");
        s = s.replace("8", "八");
        s = s.replace("9", "九");
        s = s.replace("10", "十");
        return s;

    }

    /**
     * 上中下元转化为汉字
     *
     * @param number 1：上元    2：中元    3：下元
     * @return 汉字
     */
    public static String sanYuan(int number) {

        String s = number + "";
        s = s.replace("1", "上元");
        s = s.replace("2", "中元");
        s = s.replace("3", "下元");
        return s;

    }

    /**
     * 获取当前时间戳
     */
    public static Long nowTime() {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//设置日期格式
        // new Date()为获取当前时间
        String s = sdf.format(new Date());// format() 作用是将获取的时间转换为我们自定义的日期格式字符串
        Long l = null; //将时间转换为的格式化字符串转换为时间戳，“/1000”是将时间戳精度精确为秒级
        try {
            l = sdf.parse(s).getTime() / 1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return l;

    }

    /**
     * 随机生成？位数字
     */
    public static Long getId(int number) {

        StringBuilder numStr = new StringBuilder();
        for (int i = 0; i < number; i++) {
            numStr.append((int) (10 * (Math.random())));
        }
        return Long.valueOf(numStr + new SimpleDateFormat("s").format(new Date()));

    }

    /**
     * Date转String
     *
     * @param date 日期
     * @return String日期字符串（统一格式：yyyy-MM-dd-HH-mm-ss）
     */
    public static String dateToString(Date date) {

        return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(date);

    }

    /**
     * String转Date
     *
     * @param strDate 日期字符转（统一格式：yyyy-MM-dd-HH-mm-ss）
     * @return date日期
     */
    public static Date stringToDate(String strDate) {

        Date date = null;
        try {
            date = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").parse(strDate);//调用parse()方法时 注意 传入的格式必须符合simpleDateFormat对象的格式，即"yyyy-MM-dd HH:mm:ss:SSS" 否则会报错！！
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;

    }

    /**
     * 根据【年月日时分秒】转【Date】
     *
     * @param year   年
     * @param month  月
     * @param day    日
     * @param time   时
     * @param minute 分
     * @param second 秒
     * @return date型日期
     */
    public static Date stringToDate(int year, int month, int day, int time, int minute, int second) {

        Date date = null;
        String gorianDate = (year + "-" + month + "-" + day + "-" + time + "-" + minute + "-" + second);
        try {
            date = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").parse(gorianDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;

    }

    /**
     * 根据数字判断返回结果
     *
     * @param number 数字（0或1）
     * @return [传入数字为0：返回true]、[传入数字为1：返回false]
     */
    public static String isFlag(int number) {
        if (number == 0) {
            return "是";
        } else return "否";
    }

    /**
     * 删除数组中的空元素
     *
     * @param str 原素组
     * @return 新数组
     */
    public static String[] deleteEmptyElement(String[] str) {

        // 用于存放新数组
        List<String> strListNew = new ArrayList<>();

        // 遍历添加
        for (String s : str) {
            if (s != null && !s.equals("")) {
                strListNew.add(s);
            }
        }
        return strListNew.toArray(new String[0]);

    }

    /**
     * String数组中：向指定索引处插入元素
     *
     * @param str   原数组
     * @param index 所要插入元素的索引值
     * @param value 所要插入的元素
     * @return 新数组
     */
    public static String[] insert(String[] str, int index, String value) {

        // 创建新数组
        String[] newArray = new String[str.length + 1];

        // 数组拷贝
        System.arraycopy(str, 0, newArray, 0, str.length);
        if ((newArray.length - 1 - index) >= 0) {
            System.arraycopy(newArray, index, newArray, index + 1, newArray.length - 1 - index);
        }
        // 插入元素
        newArray[index] = value;
        str = newArray;

        // 返回结果
        return str;

    }

}
